package com.sky.common.utils;

import java.security.SecureRandom;
import java.util.Random;

/**
 * 随机数工具类
 */
public class RandomUtil {
    /**
     * 强随机数生成对象
     */
    private static SecureRandom secureRandom = new SecureRandom();

    /**
     * 普通随机数生成对象
     */
    private static Random random = new Random();

    /**
     * 生成1个浮点数
     *
     * @return 浮点数
     */
    public static Double nextDouble() {
        try {
            return secureRandom.nextDouble();
        } catch (Exception e) {
            return random.nextDouble();
        }
    }

    /**
     * 生成长度为n的随机数
     *
     * @param len 长度
     * @return 随机数字符串
     */
    public static int  randomInt(int len) {
        if (len < 1) {
            throw new IllegalArgumentException("n:" + len);
        }
        int max = len<10?(int) Math.pow(10, len):Integer.MAX_VALUE;
        return (int) (nextDouble() * max);
    }

    /**
     * 产生1个随机整数
     * @param min 最小值
     * @param max 最大值
     * @return 随机整数
     */
    public static int randomInt(int min, int max) {
        if (max <= min) {
            throw new RuntimeException("max<=min");
        }
        int n = max - min + 1;
        try {
            return (int) (secureRandom.nextDouble() * n) % n + min;
        } catch (Exception e) {
            return (int) (Math.random()* Math.random() * n) % n + min;
        }
    }
}
